package cn.acmenms.service;

import cn.acmenms.exception.BusinessException;
import cn.acmenms.po.model.User;

import java.util.List;

/**
 * @ClassName: UserService
 * @Description: 用户业务接口
 * @author: 神奇的鸭鸭
 * @Date: 2017/12/28 13:25
 */
public interface UserService {

    /**
     * 注册
     * @param user User对象
     * @throws BusinessException 业务异常
     */
    void register(User user) throws BusinessException;

    /**
     * 查询用户通过用户名
     * @param userName 用户名
     * @return User对象
     */
    User findUserByUserName(String userName);

    /**
     * 查询用户通过邮箱
     * @param email 邮箱
     * @return User对象
     */
    User findUserByEmail(String email);

    /**
     * 登录
     * @param nameOrEmail 用户名/邮箱
     * @param password 密码
     * @param encodePwd 是否加密
     * @param lastLoginIp 最后登录IP
     * @return User对象
     * @throws BusinessException 业务异常
     */
    User login(String nameOrEmail, String password, Boolean encodePwd, String lastLoginIp) throws BusinessException;

    /**
     * 更新最后登录信息
     * @param userId 用户ID
     * @param lastLoginIp 最后登录IP
     * @param ipAddress IP地址
     */
    void updateLastLoginInfo(Integer userId, String lastLoginIp, String ipAddress);

    /**
     * 发邮箱
     * @param email 邮箱
     * @param checkCode 验证码
     * @throws BusinessException 业务异常
     */
    void sendCheckCode(String email, String checkCode) throws BusinessException;

    /**
     * 改密码
     * @param email 邮箱
     * @param password 密码
     * @param checkCode 验证码
     * @throws BusinessException 业务异常
     */
    void resetPwd(String email, String password, String checkCode) throws BusinessException;

    /**
     * 修改积分
     * @param userId
     * @param mark
     */
    void changeMark(Integer userId, int mark);

    /**
     * 查询所有用户
     * @return User对象集合
     */
    List<User> findAllActiveUser();
}